package com.sky.service;

import com.sky.dto.EmployeeDTO;
import com.sky.dto.EmployeeLoginDTO;
import com.sky.dto.EmployeePageQueryDTO;
import com.sky.dto.PasswordEditDTO;
import com.sky.entity.Employee;
import com.sky.result.PageResult;


public interface EmployeeService {

    /**
     * 员工登录
     * @param employeeLoginDTO
     * @return
     */
    Employee login(EmployeeLoginDTO employeeLoginDTO);

    /**
     * 新增员工信息。
     *
     * 该方法通过接收一个EmployeeDTO对象，将其保存到数据库中。
     * 主要用于后台管理系统中，对员工数据进行增、删、改、查等操作之一的保存操作。
     *
     * @param employeeDTO 员工数据传输对象，包含了需要保存的员工的所有信息。
     *                    数据传输对象（DTO）用于在不同层次之间传递数据，此处用于从业务逻辑层传递到数据访问层。
     * @return 由于该方法设计为void，即不返回任何结果，因此没有返回值说明。
     */
    void save(EmployeeDTO employeeDTO);


    /**
     * 根据员工查询条件进行分页查询。
     *
     * 该方法接收一个EmployeePageQueryDTO对象作为参数，该对象包含了分页查询所需的条件信息。
     * 方法返回一个PageResult对象，该对象封装了查询结果的分页信息和数据列表。
     *
     * @param employeePageQueryDTO 包含员工查询条件和分页信息的数据传输对象。
     * @return 返回一个PageResult对象，其中包含了根据查询条件分页查询得到的员工数据和分页信息。
     */
    PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO);


    /**
     * 根据给定的状态和ID，启动或停止某个进程或服务。
     *
     * 此方法根据传入的状态参数决定是启动还是停止某个进程或服务。具体逻辑未在方法体内展示，
     * 因此实际的启动和停止操作需要根据实际业务逻辑来实现。这里的重点是理解方法的意图，
     * 即根据状态参数的不同，执行不同的操作。
     *
     * @param status 一个整型值，用于指示操作类型。具体的值和含义需要根据实际业务逻辑来定义。
     *               例如，可能约定1表示启动，0表示停止。
     * @param id 需要启动或停止的进程或服务的ID。这个ID用于唯一标识要操作的目标。
     *           具体的ID类型和生成逻辑应根据实际情况来确定。
     */
    void startOrStop(Integer status, Long id);



    /**
     * 更新员工信息的方法。
     *
     * 该方法接收一个EmployeeDTO对象作为参数，用于更新数据库中的员工信息。
     * 参数中的员工信息应包含需要更新的所有字段，方法将通过比较现有员工数据和传入的DTO数据，
     * 对相应字段进行更新操作。此方法的设计旨在减少数据库访问次数，提高数据更新的效率。
     *
     * @param employeeDTO 员工数据传输对象，包含需要更新的员工信息。
     *                    DTO的设计用于在业务逻辑和数据访问层之间传递数据，减少耦合度。
     * @return 无返回值。更新操作完成后，方法直接返回，不提供更新结果的直接反馈。
     */
    void update(EmployeeDTO employeeDTO);


    /**
     * 根据员工ID获取员工信息。
     *
     * 本方法通过提供的员工ID从数据库或其他数据源中检索对应的员工详细信息。
     * 如果找不到匹配的员工记录，方法可能返回null或抛出异常，具体行为取决于实现。
     *
     * @param id 员工的唯一标识符。不能为null。
     * @return 返回与给定ID匹配的员工对象。如果找不到匹配的员工，则可能返回null。
     */
    Employee getById(Long id);



    void editPassword(PasswordEditDTO passwordEditDTO);
}
